package io.renren.modules.weixin.api;

import com.alibaba.fastjson.JSONObject;
import io.renren.common.utils.BeanUtil;
import io.renren.common.utils.OKHttpUtils;
import io.renren.modules.weixin.api.enums.ResultType;
import io.renren.modules.weixin.api.response.BaseResponse;
import io.renren.modules.weixin.config.WXConfig;
import io.renren.modules.weixin.util.WeiXinUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


/**
 * @Author: zhangxinlin
 * @Description:
 * @Date: Create in 17:50 2018/1/29
 * @Modified By：
 */
@Component
public class BaseAPI {

    @Autowired
    WXConfig wxConfig;

    @Autowired
    WeiXinUtils weiXinUtils;

    protected Logger logger = LoggerFactory.getLogger(getClass());

    protected static final String BASE_API_URL = "https://api.weixin.qq.com/";


    /**
     * 通用post请求
     *
     * @param url  地址，其中token用#代替
     * @param json 参数，json格式
     * @return 请求结果
     */
    protected BaseResponse executePost(String url, String json) {
        BaseResponse response;
        BeanUtil.requireNonNull(url, "url is null");

        //需要传token
        String postUrl = url.replace("#", weiXinUtils.getAccessToken());
        try {
            String respStr = OKHttpUtils.post(postUrl,json);
            return JSONObject.parseObject(respStr,BaseResponse.class);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 通用post请求
     *
     * @param url  地址，其中token用#代替
     * @param json 参数，json格式
     * @return 请求结果
     */
    protected <T extends BaseResponse> T executePost(String url, String json,Class<T> tClass) {
        BaseResponse response;
        BeanUtil.requireNonNull(url, "url is null");

        //需要传token
        String postUrl = url.replace("#", weiXinUtils.getAccessToken());
        try {
            String respStr = OKHttpUtils.post(postUrl,json);
            return JSONObject.parseObject(respStr, tClass);
        } catch (Exception e) {
            logger.info("post 请求发送失败,url:{}",url);
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 通用get请求
     *
     * @param url 地址，其中token用#代替
     * @return 请求结果
     */
    protected BaseResponse executeGet(String url) {
        BaseResponse response;
        BeanUtil.requireNonNull(url, "url is null");
        //需要传token
        String getUrl = url.replace("#", weiXinUtils.getAccessToken());
        try {
            String respStr = OKHttpUtils.get(getUrl);
            BaseResponse baseResponse = JSONObject.parseObject(respStr,BaseResponse.class);
            if (StringUtils.isNotBlank(baseResponse.getErrcode())) {
                // 返回json中包含 errcode 说明请求发送成功，微信返回错误

            }else{
                // 微信返回正确结果

            }

        } catch (Exception e) {
            logger.info("get请求发送失败，url:{}",url);
            e.printStackTrace();
        }
        return null;
    }


    /**
     * 通用get请求
     *
     * @param url 地址，其中token用#代替
     * @return 请求结果
     */
    protected <T extends BaseResponse> T executeGet(String url,Class<T> tClass) {
        BaseResponse response;
        BeanUtil.requireNonNull(url, "url is null");
        //需要传token
        String getUrl = url.replace("#", weiXinUtils.getAccessToken());
        try {
            String respStr = OKHttpUtils.get(getUrl);
            return JSONObject.parseObject(respStr, tClass);
        } catch (Exception e) {
            logger.info("get请求发送失败，url:{}",url);
            e.printStackTrace();
        }
        return null;
    }
}
